#define kWidth 40
#define kHeight 80
#define kParamter 2*(kwidth+kHeight)
//
#define MAX(a,b) (((a)>(b))?(a):(b))
// MAX(10,40) 替换为 (((10)>(40))?(10):(40))
// MAX(40.2,"hello") 在预处理阶段也是正确的，编译会失败，因为
// 预处理只是简单替换参数
// int max = MAX(fib(10),fib(40));
// 以上例子函数会被调用两次
// int larger = MAX(m++,n++);
// 以上例子会出现错误 m,n会计算多次

#define NthElemAddr(base,elemSize,index) ((char*)base+index*elemSize)
// assert.h 定义了assert宏，如下
#ifdef NDEBUG
#define assert(cond) (void)0
#else
#define assert(cond) (cond)?((void)0):fprint(stderr,"----"),exit(0);
#endif

#include<stdio.h>
#include<stdlib.h>
//以上是系统头文件
#include "root.h"
//以上是用户定义的头文件
//gcc -c hello.c  生成o文件
//gcc -E hello.c 查看预处理后的内容

